namespace CSharpPro._1016;

public class Demo
{
    //作业1
    public void TestPrint1()
    {
        Console.WriteLine("请输入三个整数，用空格分隔：");
        string[] input = Console.ReadLine().Split();
        int x = int.Parse(input[0]);
        int y = int.Parse(input[1]);
        int z = int.Parse(input[2]);

        // 排序
        int temp;
        if (x > y)
        {
            temp = x;
            x = y;
            y = temp;
        }

        if (x > z)
        {
            temp = x;
            x = z;
            z = temp;
        }

        if (y > z)
        {
            temp = y;
            y = z;
            z = temp;
        }

        Console.WriteLine($"由小到大排序：{x} {y} {z}");
    }

    //作业2
    public void TestPrint2()
    {
        int sum = 0;
        Console.WriteLine("符合条件的数字：");

        for (int i = 1; i <= 100; i++)
        {
            // 不是7的倍数且不包含7
            if (i % 7 != 0 && !i.ToString().Contains("7"))
            {
                Console.Write(i + " ");
                sum += i;
            }
        }

        Console.WriteLine($"\n这些数字的和为：{sum}");
    }

    //作业3
    public void TestPrint3()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                Console.Write($"{j}×{i}={i * j}\t");
            }

            Console.WriteLine();
        }
    }

    //作业4
    public void TestPrint4()
    {

        Console.WriteLine("1000以内的所有完数：");

        // 遍历1到1000的所有数
        for (int num = 2; num <= 1000; num++)
        {
            // 存储所有真因子
            List<int> factors = new List<int>();

            // 查找所有真因子（除了自身以外的因数）
            for (int i = 1; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    factors.Add(i);
                }
            }

            // 计算真因子之和
            int sum = 0;
            foreach (int factor in factors)
            {

                sum += factor;
            }

            // 判断是否为完数
            if (sum == num)
            {
                Console.Write($"{num} = ");
                for (int i = 0; i < factors.Count; i++)
                {
                    Console.Write(factors[i]);
                    if (i < factors.Count - 1)
                    {
                        Console.Write(" + ");
                    }
                }

                Console.WriteLine();
            }
        }
    }

    //作业5
    public void TestPrint5()
    {
        Console.WriteLine("请输入一个正整数：");
        string input = Console.ReadLine();

        // 验证输入是否为正整数
        if (!int.TryParse(input, out int number) || number <= 0)
        {
            Console.WriteLine("输入无效，请输入一个正整数！");
            return;
        }

        // 1. 判断位数
        int digitCount = input.Length;
        Console.WriteLine($"这是一个{digitCount}位数");

        // 2. 逆序打印各位数字
        Console.Write("逆序打印各位数字：");
        for (int i = input.Length - 1; i >= 0; i--)
        {
            Console.Write(input[i] + " ");
        }

        Console.WriteLine();
    }

    //作业6
    public void TestPrint6()
    {
        Console.WriteLine("请输入菱形的行数（建议输入奇数）：");
        string input = Console.ReadLine();

        // 验证输入是否为有效的正整数
        if (!int.TryParse(input, out int rows) || rows <= 0)
        {
            Console.WriteLine("输入无效，请输入一个正整数！");
            return;
        }

        // 处理偶数行的情况（自动调整为下一个奇数）
        if (rows % 2 == 0)
        {
            rows++;
            Console.WriteLine($"已自动调整为奇数行：{rows}");
        }

        int half = rows / 2;

        // 打印上半部分（包括中间行）
        for (int i = 0; i <= half; i++)
        {
            // 打印空格
            for (int j = 0; j < half - i; j++)
            {
                Console.Write(" ");
            }

            // 打印星号
            for (int k = 0; k < 2 * i + 1; k++)
            {
                Console.Write("*");
            }

            Console.WriteLine();
        }

        // 打印下半部分
        for (int i = half - 1; i >= 0; i--)
        {
            // 打印空格
            for (int j = 0; j < half - i; j++)
            {
                Console.Write(" ");
            }

            // 打印星号
            for (int k = 0; k < 2 * i + 1; k++)
            {
                Console.Write("*");
            }

            Console.WriteLine();
        }
    }
}